
const { createUser, getUserInfo, updateById } = require('../service/user.service')

const { userRegisterError, userLoginError, updatePasswordError } = require('../constant/error.type')
const { successData, createToken } = require('../utils/common')
class UserController {
  async register (ctx, next) {
    // 1. 获取数据
    const { user_name, password } = ctx.request.body
    try {
      // 2. 操作数据库
      const res = await createUser(user_name, password)
      // console.log(res)
      // 3. 返回结果
      ctx.body = successData('用户注册成功', { id: res.id, user_name: res.user_name })
    } catch (error) {
      console.error('新增用户信息错误', error)
      return ctx.app.emit('error', userRegisterError, ctx)
    }
  }

  async login (ctx, next) {
    const { user_name } = ctx.request.body
    // 1. 获取用户信息（在token的payload中记录 id,user_name,is_admin
    try {
      // 从返回结果对象中，剔除password属性，将剩下的属性放到新的对象中
      const { password,  ...resUser} = await getUserInfo({ user_name })

      const token = createToken(resUser)
      ctx.body = successData('用户登录成功', { token, })

    } catch (error) {
      console.error('用户登录失败', error)
      return ctx.app.emit('error', userLoginError, ctx)
    }
  }

  async changePassword(ctx, next) {
    // 1. 获取数据
    const id = ctx.state.user.id
    const password = ctx.request.body.password
    // console.log(id , password)
    try {
      // 2. 操作数据库
      if(await updateById({ id, password })) {
        // 3. 返回结果
        ctx.body = successData('修改密码成功')
      } else {
        return ctx.app.emit('error', updatePasswordError, ctx)
      }
    } catch (error) {
      console.error('更新用户密码失败', error)
      return ctx.app.emit('error', updatePasswordError, ctx)
    }

  }
}

module.exports = new UserController()